package com.landun.market.service;

import com.landun.market.exception.DataNotFoundException;
import com.landun.market.pojo.enums.StateCode;
import com.landun.market.pojo.model.User;

import java.util.List;

/**
 * @author jiang.chuan
 * @date 2018-05-11
 */
public interface IUserService {

    /**
     * 查询用户详情
     *
     * @param userId 用户ID
     * @return User
     */
    User load(Integer userId) throws DataNotFoundException;

    /**
     * 查询用户详情
     *
     * @param userId 用户ID
     * @return User
     */
    User loadSafely(Integer userId);

    /**
     * 根据关键字查询用户列表
     *
     * @param keyword 关键字
     * @return 用户列表
     */
    List<User> find(String keyword);

    /**
     * 判断品类名称是否重复
     *
     * @param identifier 登陆名、邮箱、手机（全等）
     * @param excludedId 需要排除的用户ID
     * @return true: 用户已经存在，false: 用户不存在
     */
    boolean isDuplicated(String identifier, Integer excludedId);

    /**
     * 创建用户
     *
     * @param user 用户
     * @return true: 创建成功, false: 创建失败
     */
    boolean create(User user);

    /**
     * 修改用户信息
     * 只提供修改：姓名 / 电话 / 所在公司
     *
     * @param userId 用户ID
     * @param user   需要修改的信息
     * @return true: 修改成功, false: 修改失败
     */
    boolean update(Integer userId, User user);

    /**
     * 修改密码
     *
     * @param userId      用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return true: 修改成功, false: 修改失败
     */
    boolean changePassword(Integer userId, String oldPassword, String newPassword);


    /**
     * 修改用户状态
     *
     * @param userId    用户ID
     * @param stateCode 状态
     * @return true: 修改成功, false: 修改失败
     */
    boolean changeState(Integer userId, StateCode stateCode);
}
